# 2025.02.07力扣网刷题
# 重新格式化电话号码——字符串——简单
# 给你一个字符串形式的电话号码 number 。number 由数字、空格 ' '、和破折号 '-' 组成。
# 请你按下述方式重新格式化电话号码。
# 首先，删除 所有的空格和破折号。
# 其次，将数组从左到右 每 3 个一组 分块，直到 剩下 4 个或更少数字。剩下的数字将按下述规定再分块：
# 2 个数字：单个含 2 个数字的块。
# 3 个数字：单个含 3 个数字的块。
# 4 个数字：两个分别含 2 个数字的块。
# 最后用破折号将这些块连接起来。注意，重新格式化过程中 不应该 生成仅含 1 个数字的块，并且 最多 生成两个含 2 个数字的块。
# 返回格式化后的电话号码。
# 示例 1：
# 输入：number = "1-23-45 6"
# 输出："123-456"
# 解释：数字是 "123456"
# 步骤 1：共有超过 4 个数字，所以先取 3 个数字分为一组。第 1 个块是 "123" 。
# 步骤 2：剩下 3 个数字，将它们放入单个含 3 个数字的块。第 2 个块是 "456" 。
# 连接这些块后得到 "123-456" 。
# 示例 2：
# 输入：number = "123 4-567"
# 输出："123-45-67"
# 解释：数字是 "1234567".
# 步骤 1：共有超过 4 个数字，所以先取 3 个数字分为一组。第 1 个块是 "123" 。
# 步骤 2：剩下 4 个数字，所以将它们分成两个含 2 个数字的块。这 2 块分别是 "45" 和 "67" 。
# 连接这些块后得到 "123-45-67" 。
# 示例 3：
# 输入：number = "123 4-5678"
# 输出："123-456-78"
# 解释：数字是 "12345678" 。
# 步骤 1：第 1 个块 "123" 。
# 步骤 2：第 2 个块 "456" 。
# 步骤 3：剩下 2 个数字，将它们放入单个含 2 个数字的块。第 3 个块是 "78" 。
# 连接这些块后得到 "123-456-78" 。
# 示例 4：
# 输入：number = "12"
# 输出："12"
# 示例 5：
# 输入：number = "--17-5 229 35-39475 "
# 输出："175-229-353-94-75"
# 提示：
# 2 <= number.length <= 100
# number 由数字和字符 '-' 及 ' ' 组成。
# number 中至少含 2 个数字。

class Solution(object):
    def reformatNumber(self, number):
        """
        :type number: str
        :rtype: str
        """
        my_list = []
        length = 0
        for num in number:
            if num.isdigit():
                my_list.append(num)
                length += 1
        i, token = 0, 0
        while i < length:
            if token == 0 and i == token + 3:
                my_list.insert(i, '-')
                token = i
                length += 1
            elif i == token + 4:
                my_list.insert(i, '-')
                token = i
                length += 1
            i += 1
        if my_list[-2] == '-':
            my_list[-3], my_list[-2] = my_list[-2], my_list[-3]
        return ''.join(my_list)